#include <iostream>

/*C++风格的不定参函数*/
void xprintf()
{
    std::cout << std::endl;
}
template <typename T, typename... Args>
void xprintf(const T &value, Args &&...args)
{
    std::cout << value << " ";
    if ((sizeof...(args)) > 0)
    {
        xprintf(std::forward<Args>(args)...);
    }
    else
    {
        xprintf();
    }
}
// int main()
// {
//     xprintf("日志");
//     xprintf("日志","系统");
//     xprintf("日志","系统",666);
// }

/*饿汉模式：以空间换时间--不管你是否需要使用这个对象，程序运行前都想把这个对象实例化好*/
class Singleton
{
private:
    int _data;

    static Singleton _inst;
    Singleton()
        : _data(100)
    {
        std::cout<<"单例对象实例化完成"<<std::endl;
    }
    ~Singleton() {}
    Singleton(const Singleton &) = delete;
    Singleton &operator=(const Singleton &) = delete;

public:
    static Singleton& GetInstance()
    {
        return _inst;
    }
    int GetData()
    {
        return _data;
    }
};
Singleton Singleton::_inst;

/*懒汉模式*/
/*懒加载：延迟加载的思想--当一个对象需要使用的时候再进行实例化*/
// class Singleton
// {
// private:
//     int _data;

//     Singleton() 
//     :_data(1000)
//     {
//         std::cout<<"单例对象实例化完成"<<std::endl;        
//     }
//     ~Singleton() {}
//     Singleton(const Singleton &) = delete;
//     Singleton &operator=(const Singleton &) = delete;

// public:
//     static Singleton& GetInstance()
//     {
//         static Singleton _eton;
//         return _eton;
//     }
//     int GetData()
//     {
//         return _data;
//     }
// };
int main()
{
    std::cout << Singleton::GetInstance().GetData() << std::endl;
}